Porque a data é um item tão complicado ?
A data dentro de cada sistema (web, sql, etc.) tem um formato binário interno e, nem sempre,
o mesmo em todos os sistemas. Por esse motivo ocorre uma 'conversão' que é problemática porque
depende de como a data é interpretada por cada sistema.
Além dos problemas internos do armazenamento de data existe os externos como o idioma, a
necessidade que temos de utilizar as partes da data e horário (dia/mes/ano), os
aplicativos utilizados para interagir com o servidor que utilizam formatos específicos, etc.
Outra questão são as operações com datas : Muitas vezes precisamos fazer operações com data
como quantos dias se passaram de uma data até outra ou dias entre duas datas, data futura, etc.
Mesmo nas aplicações do dia-a-dia temos diferenças com a data. Por exemplo, para bancos o
ano tem 360 dias divididos em 12 meses de 30 dias. Este tipo de definição é chamado de 'comercial',
mais específicamente, 'mês comercial', 'ano comercial', etc.
Já nós também temos algumas complicações...se o ano é normal ou bissexto, dependendo do mês
temos um determinado número de dias, feriados, feriados facultativos, etc.
Outra conversão é onde estamos exibindo...numa aplicação web, numa aplicação desktop onde
quem interpreta a data são 'mecanismos' diferentes, um é o windows/linux e outro é o browser.
Tem outro detalhe que o formato do horário quando queremos o relógio com 12 ou 24 horas.
Infelizmente sempre que usarmos o relógio de 12 horas teremos associado ao horário a sigla
'AM' (Ante Meridiem') ou 'PM' (Post Meridiem) que é uma sigla em Latim que todos temos
dificuldade em entender porque temos que pensar 'AM' é antes ou depois do meio-dia.
Limitações
Se você quiser um tipo de variável que trabalhe apenas com tempo ou horario ( sem a data )
você não vai encontrar no .NET. Existe um tipo chamado TimeSpan que é um número inteiro
que apenas conta centésimos de segundos a partir de uma data padrão, contudo não define
HH:MM:SS...se você precisa dessa informação precisará fazer contas com o tipo inteiro dessa
variável.
Funções de Data e Horário no .NET
' data e tempo
Dim MinhaDatax As Date = #1/1/2013#
Dim MinhaData As DateTime = DateTime.Now
MinhaData = MinhaData.AddDays(100)
Dim StringDate As String = MinhaData.Year.ToString()
Dim MinhaData1 As Date = DateTime.Now
Dim MinhaData2 As Date = DateTime.Now.AddHours(3000)
Dim Diferenca1 As TimeSpan
Diferenca1 = MinhaData2.Subtract(MinhaData1)
Dim NumberOfMinutes As Double
NumberOfMinutes = Diferenca1.TotalMinutes
Dim MinhaData3 As DateTime = DateTime.Now
Dim Intervalo As TimeSpan = TimeSpan.FromHours(3000)
Dim MinhaData4 As DateTime = MinhaData1 + Intervalo
' Subtraindo um objeto DateTime de outro produz um TimeSpan.
Dim Diferenca As TimeSpan
Diferenca = MinhaData2 - MinhaData1
Dim MinhaData5 As Date = DateTime.Today
Dim MeuInteiro6 As Integer = Now.Day
Dim MeuInteiro7 As Integer = Now.Month
Dim MeuInteiro8 As Integer = Now.Year
Dim MeuInteiro9 As Integer = Now.Hour
Dim MeuInteiro10 As Integer = Now.Hour
Dim MeuInteiro11 As Integer = Now.Minute
Dim MeuInteiro12 As Integer = Now.Second
Dim MeuInteiro13 As Integer = Now.Millisecond
Dim MeuInteiro14 As Integer = Now.DayOfWeek
Dim MinhaData15 As Date = DateTime.Now.AddDays(3000)
Dim MinhaData16 As Date = DateTime.Now.AddMonths(300)
Dim MinhaData17 As Date = DateTime.Now.AddYears(3)
Dim MinhaData18 As Date = DateTime.Now.AddHours(3000)
Dim MinhaData19 As Date = DateTime.Now.AddMinutes(3000)
Dim MinhaData20 As Date = DateTime.Now.AddSeconds(3000)
Dim MeuInteiro15 As Integer = DateTime.DaysInMonth(2003, 2)
Dim MeuInteiro16 As Boolean = DateTime.IsLeapYear(2003)
Dim dt As DateTime = New DateTime(2010, 10, 17)
Dim dia As Integer = dt.DayOfWeek
Dim diasem As Integer = dt.DayOfWeek
Dim horarioVerao As Boolean = dt.IsDaylightSavingTime
Dim bissexto As Boolean = Date.IsLeapYear(2013)
Dim ts As TimeSpan = New TimeSpan(4, 30, 22) ' 4 horas 30 minutos e 22 segundos
ts = ts.Subtract(New TimeSpan(0, 15, 0)) ' retirando 15 minutos = 4h15min22seg
Formatação de data
Existe a função format que permite formatar a data em um padrão dependendo do parâmetro que
fornecemos.
Exemplo. Vamos utilizar uma data qualquer e observar como ela é formatada depdendo do parâmetro da Função
Format.
Dim data1 As String = 19 de Setembro de 1980 14:30:59)
O formato geral é o seguinte :
Dim fmtData As String = String.Format("d", data1)
Note que no exemplo "d" é o parâmetro especificador qude define o formato que desejamos.
Especificador |
Tipo |
Formato |
d |
Data(curta) |
19/09/1980 |
D |
Data long |
19 Setembro(1980) |
t |
Hora(Curta) |
14:30 |
T |
Hora(Longa) |
14:30:59 |
f |
Data e Hora |
19 Setembro 1980 14:30 |
F |
Data e Hora completo |
19 Setembro 1980 14:30:59 |
g |
Data de Hora padrão |
19/09/1980 14:30 |
G |
Data de Hora padrão longo |
19/09/1980 14:30:59 |
M |
Dia / Mês |
19 Setembro(1980) |
r |
String de data (RFC1123) |
Sex, 19 Set 1980 14:30:59 GMT |
s |
Sortable(Data / hora) |
1980-09-19T14:30:59 |
u |
Hora Universal, Timezone local |
1980-09-19 14:30:59Z |
Y |
Mês / Ano |
Setembro(1980) |
dd |
dia |
19 |
ddd |
Nome curto do dia da Semana |
Sex |
dddd |
Nome completo do dia da Semana |
Sexta(-feira) |
hh |
2 dígitos para a hora |
02 |
HH |
2 dígitos para a hora (24 horas) |
14 |
mm |
2 dígitos para o minuto |
30 |
MM |
Mês |
9 |
MMM |
Nome curto do Mês |
Set |
MMMM |
Nome do Mês |
Setembro |
ss |
Segundos() |
59 |
tt |
AM/PM |
PM() |
yy |
2 dígitos do Ano |
80 |
yyyy |
4 dígitos do Ano |
1980 |
: |
Separador de horário. ex. {0:hh:mm:ss} |
14:30:59 |
/ |
Seperator de data, ex. {0:dd/MM/yyyy} |
08/06/1970 |